using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._DataManagement._Geodatabase
{
    /// <summary>
    /// <para>GeoNames To Geodatabase</para>
    /// <para>Loads GeoNames data into a feature class and table. The feature class is composed of point features, and the table contains fields with information concerning the naming conventions used for the features. The feature class contains the Unique Feature Identifier (UFI) and Unique Name Identifier (UNI), which match the same fields in the GeoNames table.</para>
    /// <para>将 GeoNames 数据加载到要素类和表中。要素类由点要素组成，表中包含包含有关要素所用命名约定信息的字段。要素类包含唯一要素标识符 （UFI） 和唯一名称标识符 （UNI），它们与 GeoNames 表中的相同字段匹配。</para>
    /// </summary>    
    [DisplayName("GeoNames To Geodatabase")]
    public class GeoNamesToGeodatabase : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GeoNamesToGeodatabase()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_source">
        /// <para>GeoNames Source File</para>
        /// <para>Path to the source file containing GeoNames information. This needs to be a properly formatted GeoNames file.</para>
        /// <para>包含 GeoNames 信息的源文件的路径。这需要是格式正确的 GeoNames 文件。</para>
        /// </param>
        /// <param name="_in_feature_class">
        /// <para>GeoNames Feature Class Name</para>
        /// <para>The GeoNames feature class; this feature class should be in the working database.</para>
        /// <para>GeoNames 要素类;此要素类应位于工作数据库中。</para>
        /// </param>
        /// <param name="_in_allow_duplicates">
        /// <para>Allow Duplicates</para>
        /// <para><xdoc>
        ///   <para>Allows duplicate features in the GeoNames feature class.
        ///   <bulletList>
        ///     <bullet_item>Checked—Allows the tool to import features even if there is already an entry in the GeoNames feature class and table.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Prevents the tool from importing features if there is another feature with the same geometry and attributes in the GeoNames feature class or GeoNames table. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>允许在 GeoNames 要素类中重复要素。
        ///   <bulletList>
        ///     <bullet_item>选中 - 允许工具导入要素，即使 GeoNames 要素类和表中已有条目也是如此。</bullet_item><para/>
        ///     <bullet_item>未选中 - 如果 GeoNames 要素类或 GeoNames 表中存在具有相同几何和属性的其他要素，则阻止工具输入要素。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        /// <param name="_in_table">
        /// <para>GeoNames Table Name</para>
        /// <para>The GeoNames table. This table should be in the working database.</para>
        /// <para>GeoNames 表。此表应位于工作数据库中。</para>
        /// </param>
        public GeoNamesToGeodatabase(object _in_source, object _in_feature_class, _in_allow_duplicates_value _in_allow_duplicates, object _in_table)
        {
            this._in_source = _in_source;
            this._in_feature_class = _in_feature_class;
            this._in_allow_duplicates = _in_allow_duplicates;
            this._in_table = _in_table;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "GeoNames To Geodatabase";

        public override string CallName => "topographic.GeoNamesToGeodatabase";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_source, _in_feature_class, _in_allow_duplicates.GetGPValue(), _in_table, _out_featureclass, _out_table];

        /// <summary>
        /// <para>GeoNames Source File</para>
        /// <para>Path to the source file containing GeoNames information. This needs to be a properly formatted GeoNames file.</para>
        /// <para>包含 GeoNames 信息的源文件的路径。这需要是格式正确的 GeoNames 文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("GeoNames Source File")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_source { get; set; }


        /// <summary>
        /// <para>GeoNames Feature Class Name</para>
        /// <para>The GeoNames feature class; this feature class should be in the working database.</para>
        /// <para>GeoNames 要素类;此要素类应位于工作数据库中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("GeoNames Feature Class Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Allow Duplicates</para>
        /// <para><xdoc>
        ///   <para>Allows duplicate features in the GeoNames feature class.
        ///   <bulletList>
        ///     <bullet_item>Checked—Allows the tool to import features even if there is already an entry in the GeoNames feature class and table.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—Prevents the tool from importing features if there is another feature with the same geometry and attributes in the GeoNames feature class or GeoNames table. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>允许在 GeoNames 要素类中重复要素。
        ///   <bulletList>
        ///     <bullet_item>选中 - 允许工具导入要素，即使 GeoNames 要素类和表中已有条目也是如此。</bullet_item><para/>
        ///     <bullet_item>未选中 - 如果 GeoNames 要素类或 GeoNames 表中存在具有相同几何和属性的其他要素，则阻止工具输入要素。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Allow Duplicates")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _in_allow_duplicates_value _in_allow_duplicates { get; set; }

        public enum _in_allow_duplicates_value
        {
            /// <summary>
            /// <para>ALLOW_DUPLICATES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ALLOW_DUPLICATES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DON'T_ALLOW_DUPLICATES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DON'T_ALLOW_DUPLICATES")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>GeoNames Table Name</para>
        /// <para>The GeoNames table. This table should be in the working database.</para>
        /// <para>GeoNames 表。此表应位于工作数据库中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("GeoNames Table Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_table { get; set; }


        /// <summary>
        /// <para>Out feature class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Out feature class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_featureclass { get; set; }


        /// <summary>
        /// <para>Out table</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Out table")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_table { get; set; }


        public GeoNamesToGeodatabase SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}